{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 期权定价问题\n",
    "\n",
    "*Copyright (c) 2022 Institute for Quantum Computing, Baidu Inc. All Rights Reserved.*"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "期权定价的任务是评估当前股票期权在到期日的预期价值。决定期权价值的因素有很多，包括当前股票价格、内在价值、到期时间或时间价值、波动性、利率和支付的现金股息。许多期权定价模型以这些因素作为模型的参数，用来确定期权的公允市场价值，其中最广为人知的是布莱克-斯科尔斯模型（Black-Scholes model）。布莱克-斯科尔斯模型可以通过使用少量输入参数的简单且可分析求解的模型对各种金融衍生品进行定价。该模型认为，大量交易资产的价格遵循几何布朗运动，具有恒定的漂移和波动。当应用于股票期权时，该模型包含股票的恒定价格变化、货币的时间价值、期权的执行价格以及期权到期的时间。特别地，股票或期货合约等工具在随机游走后将具有服从对数正态分布的价格，具有恒定的漂移和波动性。\n",
    "\n",
    "欧式期权定价是布莱克-斯科尔斯模型的一个简单应用，该模型可以用来计算欧式看涨期权的价格。欧式看涨期权赋予期权持有人在到期日 $T$ 以预先商定的价格 $K$ 购买股票的权利。通常，期权收益函数为 \n",
    "$$\n",
    "f(S_{T})=\\max\\{0, S_{T}-K\\}, \\tag{1}\n",
    "$$\n",
    "其中 $S_{T}$ 表示期权到期日的资产价格（asset price），$K$ 表示预先商定的价格（strike price）。这里，资产价格 $S_{T}$ 在布莱克-斯科尔斯模型下服从一个已知的概率分布，且依赖于初始价格（initial price），无风险利率（risk-free interest rate），波动性（volatility）以及期权到期日（maturity date） $T$。在经典计算中，期权股票到期时的期望价值可以通过蒙特卡罗方法计算：从已知的（风险中性）概率分布中获取市场样本，然后计算给定该市场样本的资产价格。之后，计算给定资产价格的期权收益，最后，对多个样本的收益求平均值，得出期权价格的近似值。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 量子解决方案\n",
    "\n",
    "不同于经典算法，量子蒙特卡洛（quantum Monte Carlo）方法的核心是用量子电路模拟概率分布并将资产价格储存在量子态中，进而通过量子振幅估计算法并行计算收益的平均值。通过量子叠加和纠缠的特性，量子方案与经典方案相比具有二次加速的优势。接下来我们以欧式看涨期权为例，展示如何使用量桨来模拟该量子方案，从而完成欧式看涨期权的风险中性定价问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 在线演示"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们已经给出了一个设置好的参数，可以直接用于欧式看涨期权的定价。只需要在 `config.toml` 这个配置文件中进行对应的配置，然后输入命令 \n",
    "`python  euro_pricing.py --config config.toml`\n",
    "即可对配置好的欧式期权进行定价。\n",
    "\n",
    "这里，我们给出一个在线演示的版本，可以在线进行测试。首先定义配置文件的内容："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "euro_toml = r\"\"\"\n",
    "# 用于计算期权定价模型的整体配置文件。\n",
    "# 初始价格。\n",
    "initial_price = 100\n",
    "# 既定价格。\n",
    "strike_price = 110\n",
    "# 无风险利率。\n",
    "interest_rate = 0.05\n",
    "# 市场波动性。\n",
    "volatility = 0.1\n",
    "# 期权到期日（以年为单位）。\n",
    "maturity_date = 1\n",
    "# 估计精度指数。\n",
    "degree_of_estimation = 5\n",
    "\"\"\""
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "量桨的金融模块实现了量子蒙特卡洛方案的数值模拟。我们可以从 ``paddle_quantum.finance`` 模块里导入 ``EuroOptionEstimator`` 来解决配置好的期权定价问题。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "该期权的风险中性价格大约为 2.2613329887390137\n",
      "以下是该量子方案的电路实现图。\n"
     ]
    },
    {
     "data": {
      "image/png": "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PTE0NBQR1X1Cy+rVq2PdunURIXgAAI0zbdq0+O///b/HmjVr4lOf+tTI99/97nfHHXfcEXfffXccdNBBDZwQAGqr9DctzWbx4sVj+izguXPnlv7ZwQAAW2vmzJnx93//9/HpT386IiI+/elPp31zOgDYmFd4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOkIHgAAAEA6ggcAAACQjuABAAAApCN4AAAAAOm0NHqAeqhUKo0eYatN5NkBAACgUSZF8Ojq6mr0CAAAAEAduaQFAAAAJpgf/ehH0dTUFFdeeWWjRxm30r7Co62tLXp7exs9Rqna2toaPQIAAABMCGmDR0tLS3R0dDR6DAAAAKABXNICAABAak899VTccMMN8Y53vCP23XffmDVrVsyYMSN23333OOqoo+Jb3/pWPPPMM1s8x/HHHx9NTU1V/e+rX/1qfOQjH6n6+Of736GHHvqcGc4555yRX3/Na14TEREnnnjiyPcOOeSQWtx9E1baV3gAAADA97///ViyZEn86le/es6v9fb2Rm9vb3zve9+LCy64IK677rrYY489nvc8y5cvr/r3/Ku/+qv4+te/vpUT//kcz/bWt741XvziF0dExAMPPBDnn39+nHzyyfGqV70qIiJmz569Tb9nNoIHAAAAKZ111lnxj//4jxERsdtuu8X73//+OOyww2LPPfeMoijigQceiCuuuCL+1//6X7F8+fJ45StfGXfddddzwsHg4GCsXLkyIiKWLFkS55133hZ/3x122CFuvPHG533VyKpVq2L//fePiIhzzz03TjvttOc9x/Tp05/zvQULFsSCBQsi4o9vWnr++efHQQcdFMcff/wo98TkJHgAAACQzplnnhkXXHBBREQcddRR8ZWvfCV22mmnTY7Zbbfd4tWvfnUsXrw4PvjBD8aaNWvi1FNPjWuvvXaT43p6emJoaCgi/hgddthhh1F//9bW1uf9/qpVq0a+Xrx4cVXnYut4Dw8AAABSue6660Zix9ve9rb4zne+85zYsbHTTz995D0xrrvuunjwwQc3+fWNL2fZe++9t2m2n/3sZyNfv/zlL9+mc7FlggcAAABpPPzww/G+970vIiL+8i//Mq688sqYMmX0p74nnXRSREQURRE333zzJr9Wi+Cx2267RVtb2zadiy0TPAAAAEjj4osvjt/97ncREXHRRRfF9ttvX9XtFi9ePPJ1T0/PJr82HDxmz54dM2fO3Kb5hoOHV3fUnuABAABAChs2bIjLL788IiL22WefeNOb3lT1bWfNmjXy9cMPPzzydVEUce+990bEtr+6Y926dfHrX/86IgSPevCmpQAAAKTwgx/8IB555JGIiHjnO98ZTU1NVd/2iSeeGPl6u+22G/l69erVMTAwEBERc+fOjccee2yz59h+++23+Ht6/4768goPAAAAUrjllltGvn7DG94wptuuWbNm5OsXvOAFI19v/P4d//zP/xw77rjj8/5vl1122SSaPB/Bo74EDwAAAFIYDgrTp0+P+fPnj+m2d95558jXG8eIjYPHlsyfP3+zH0X77Pm22267eOlLXzqm+Z5txowZMXfu3C1++sxk55IWAAAAUujv74+IP765aHNz85hue+ONN458/cpXvnLk6+HgMW3atBgYGIipU6du9XzDwWP+/PnbdJ6IiAMOOCBWrVq1TefIzis8AAAASGHDhg0R8cdXeIxFX19f3HbbbRERsWjRok1efTEcPBYsWLBNkeLpp5+O++67LyJczlIvggcAAAApDH/SyqOPPjqm21144YUxNDQUERFLliwZ+f7atWtH3ttj0aJF2zTbypUrY3BwMCIEj3oRPAAAAEjhZS97WURE/O53v4u+vr6qbrNixYr44he/GBER+++/fxx//PEjv7bx+3dsa/DwhqX1J3gAAACQwuGHHz7y9Ve/+tVRj3/44Yfj6KOPjqeeeipaW1vj61//ekyZ8uenyYLHxCZ4AAAAkMKxxx4bc+bMiYiIz3zmM5t88sqz/fznP49DDjkkVq5cGc3NzXHllVeOvEJk2MZvWPrsXxur4eAxZ86c2HXXXbfpXFRH8AAAACCFadOmxTe+8Y1oaWmJJ554Ig455JA4++yz42c/+1k88sgj0d/fH7feemuccsopse+++0ZPT0+0trbGd77znTj66KOfc77h4LHvvvtu86eqDAcPr+6oHx9LCwAAQBqH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U06J9evXxy9/+cv40Ic+FHPnzq3z1Dyfse7y85//fLS1tcVb3vKWBkzLlox1l0uWLImVK1fG2rVr45vf/GZcffXV8dGPfrQBk8P4JngA48o///M/x+c+97nYfffd46Mf/WhccsklceCBB8Zll10W++yzT/z7v//7yLE77rhjRET8/ve/3+Qc69ati5122qmuc/NcY9kl49/W7vMrX/lKfOxjH4tbbrkl9thjj/oOzfPalp/NPfbYI4488sh4wxveEEVR1HFqns9Ydrlq1aq46KKL4gtf+EIDJ2ZzxvpzuXDhwthtt91iypQpsXDhwjjvvPPim9/8ZoOmh3GsgD/p7e0tIqKIiKK3t7fR42yzf/3Xfy1+/vOfN3qMTdTrPp7Iu7zzzjuLRx999Dnf/9KXvlRERHH00Udv8v3dd9+9+NrXvjbyfz/wwANFU1NT8Zvf/Kamc9bzPp6o+xzrLofdfvvtxbRp02o83Z/ZZXW2Zp+XXXZZ8cIXvrC45557aj9gYZfV2tqfzWE/+clPiqampuLxxx+v0YR2Wa2x7PKrX/1qsd122xW77rprseuuuxYzZ84sIqKYNWtWcfnll9d0To9/RretP5ff+973itmzZ9douj+byPcxk5NXeJDSb3/723jjG98YP/nJTxo9CmO0ePHi572u+Nhjj42IiHvvvXeT75988snx2c9+Nv7jP/4jfv/738eZZ54ZRx55pDcsHQfGusunn346BgcHR65BHhwcjMHBwZrPSXXGus9LL700zjnnnLj11ltjv/32q8OEVGssu9ywYUNcccUV8cgjj0RExOrVq+Oss86KV73qVT7lYxwYyy7f/va3x+rVq2P58uWxfPny+D//5/9ERMQPf/jDeMc73lGXedm8sf4d++1vf3vkFa4rVqyIs88+O44++uiazwkTjU9pIaVTTjklHnnkkZH3eGDiW7NmTUREzJ49e5Pvn3XWWfHII4/EokWL4g9/+EMceuih8aUvfakRI1Klze3yqquu2uQjhWfMmBER4WXz49zm9vnBD34wpk6dGgcddNAm33/sscfqNhtj83y7bGpqiu9+97vx0Y9+NJ544onYdddd47DDDvN+LOPc8+2ytbV1k0g1NDQUERHt7e2xww471HdAqra5v2Mvu+yyeN/73hdPPfVUtLW1xbHHHhuf+MQnGjEijGuCB+lcffXVcd1110VECB7jzIYNG6KpqWnkiexYnH322RERmzwhjohobm6Oiy66KC666KJSZqQ6tdjlCSecECeccEIZ4zFGtdinUNUYZe9yxowZ8X//7/8tbT6qV4ufy43tsccefk7rpBa7/PGPf1zKbJCdS1pI5Xe/+1184AMfGPm/fVJHYz355JNx5ZVXxuGHHx677LJLbL/99tHa2hq77rprvP3tb4+f/vSnVZ3n/PPPj2uvvTbe/OY3x7ve9a4aT83zsctc7DMPu8zDLvOwSxhHGvweIowjGd6E6G1ve1vx1re+deS/4/3vf3+jR9rEZHrTrqVLlxadnZ3FoYceWnz3u98tent7i8HBweLnP/95cdpppxVNTU3FlClTii996UtbPM+ll15aRERxyCGH1PQN8sZqMr2hnl1OzN9rczLv0y7tcrz/XpuTeZdF4fGPXULjCB6MmOh/gX3nO98pXvSiFxW//e1vR/47/u7v/q7RY21iMvyDPzQ0VJx11lnFjBkzim9+85ubPe5Tn/pUERFFc3NzcccddzzvMRdddFEREcVrX/vacfWPfVFMjgfjdjmxf69nmwz7tMtN2eX4+72ebTLssig8/tmYXUJ9CR6MmMh/gT300EPF7Nmzix/+8IdFURTFlClTiogo3vKWtzR4sk1l/wf/mWeeKY466qiiubm5uOGGG7Z47Pr164vtttuuiIji9a9//XN+/bOf/WwREcVhhx1WPPHEE7UaeatlfzBulxP/99rYZNmnXW7KLsff77WxybLLovD4Z2N2CfUleDBiIv8FdswxxxSnnHLKyP+94447FhFRvO51r2vgVM+V/R/8//bf/lsREcVZZ51V1fEHHnhgERFFS0tLsX79+pHvn3feeUVEFEceeWQxODhYq3G3SfYH43Y58X+vjU2Wfdrlc9nl+Pq9NjZZdlkUHv88m11C/fiUFia86667Lu68885NPp98hx12iIGBAZ/SUke33357fOpTn4rZs2fHOeecU9Vt/vIv/zKWLVsWQ0NDsWrVqth///3jn/7pn+LjH/94zJ49O9761rfGNddc85zbHX/88SVPz8bsMhf7zMMu87DLPOwSxjfBgwntkUceife///1x9dVXx/bbbz/y/eGvBY/6KIoi/st/+S/xzDPPxPve976YNm1aVbfbcccdR75+4oknIiLizjvvjIiI3/72t/Hud7/7eW/nH/zasctc7DMPu8zDLvOwSxj/fCwtE9oHPvCBOProo+Ov//qvN/m+4FFf/+///b9Yvnx5REQcccQRW3WOXXfdNSIirrzyyij+eLndZv9H7dhlLvaZh13mYZd52CWMf17hwYT1/e9/P7q7u2PZsmXx2GOPbfJr06dPj4iI9evXN2K0SWfp0qUREdHc3BwLFy6s+naPPvpoRETMmDEj5s6dW4vRGCO7zMU+87DLPOwyD7uE8U/wYEJ6+OGH433ve19MnTo1Zs+eHU8//fTzHvfsEEJt3H333RERMWvWrGhubq76dj09PRER8dd//dfR0uKvo/HALnOxzzzsMg+7zMMuYfxzSQsT0rvf/e54/etfH7/61a9iaGjoOS/5O/zwwyMi4umnn47HH3+8wdPm99BDD435NmvWrIkHHnggImKz16pSf3aZi33mYZd52GUedgnjn+DBuLZ+/fq44YYbNnmlxic/+cl44IEH4rLLLtvs7WbNmjXy9Zo1a2o6IxG77bZbRPzxH/5Vq1ZVdZvLL788iqKIBQsWxNve9rZajscY2GUu9pmHXeZhl3nYJYx/ggfj2jvf+c74z//5P8dxxx0XDz/8cJx55plxwQUXxLe+9a1NPpXl2V784hePfH3rrbdGRMT9998ffX19NZ95MnrjG9848vWSJUviqaeees4xg4ODI+9E3tvbG5dccklMnTo1rrjiipgyxV9F44Vd5mKfedhlHnaZh13C+OenjHHtN7/5TUREXH/99fGCF7wgLrjggvjSl74UixYt2uLt/uZv/mbk67POOive+MY3xlve8pbYbrvtajrvZHXKKafEQQcdFBERN910U7ziFa+I73znO7FixYpYtmxZXHLJJXHMMcdEpVKJJ598Mo477rjYsGFD/NM//VN0dXU1eHo2Zpe52GcedpmHXeZhlzABFPAnvb29RUQUEVH09vY2epyiKIri6quvLlpaWoqIKGbMmFFcccUVVd/2k5/8ZLHzzjsXO+20U/GmN72pWL16dQ0nrU697uNG7HLDhg3FeeedV+y7775Fa2trMWPGjGLPPfcsjjnmmOKaa64pnnrqqWLdunXF4YcfXmy33XbFl7/85brMVSv1vI/rvU+7zPF7DZtM+7RLuxzvv9ewybTLovD4xy6hcQQPRozXv8AefPDB4tprry3WrFnT6FG2WeZ/8Ldk3bp1xRVXXFF0dnYWixcvLn760582eqRtlv3B+ObY5cT5vaqRbZ92aZfj/feqRrZdFoXHP3YJjeNzkBj35s2bF/PmzWv0GFSpv78/fvrTn8bPfvazWLFiRaxcuTIeeOCBePWrXx2f//zn481vfnM0NTU1ekyqYJe52GcedpmHXeZhlzA+CR7ANhsaGorzzz8/rr/++rjrrruiKIqRXzv66KPjhhtuiDlz5mz29j/4wQ/i8ccfjze/+c11mJYtsctc7DMPu8zDLvOwSxj/vGkpsM2amppir732ir/927+NY489NnbfffeRX7vmmmtir732ir/7u7+LH/7wh/H0009vctt77703zj333DjssMPqPTbPwy5zsc887DIPu8zDLmH88woPYJs1NzfHscceu8n3uru741vf+lZ85zvfid/85jdx1VVXxVVXXRUzZ86MAw44IF7wghfEr371q/iP//iPuOGGG2L69OkNmp6N2WUu9pmHXeZhl3nYJYx/ggdQE11dXdHV1RUXXXRRLFu2LH7wgx/E3XffHWvXro0nn3wytttuu3jPe94TRx11VLS2tjZ6XLbALnOxzzzsMg+7zMMuYXwRPICamjJlShx88MFx8MEHN3oUtpFd5mKfedhlHnaZh13C+OA9PAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASEfwAAAAANIRPAAAAIB0BA8AAAAgHcEDAAAASKel7BP29fWVfUrqpFKpNHqESaWW97dd1let72/7rB+7zMMu87DLXDz+ycP9TS10dHSUer7Sg0dnZ2fZp4SUurq6Gj0CJbHLPOwyD7vMwy5zsc887JJaKIqi1PO5pAUAAABIp/RXePT29pZ9SuqkUqkotXXU3d0d7e3tNTm3XdZXLXcZYZ/1ZJd52GUedpmLxz951PpnE8pQevAo+5obyKq9vd3PSxJ2mYdd5mGXedhlLvaZh10yEbik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",
      "text/plain": [
       "<Figure size 1088x1320 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import os\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python'\n",
    "\n",
    "import toml\n",
    "from paddle_quantum.finance import EuroOptionEstimator\n",
    "\n",
    "config = toml.loads(euro_toml)\n",
    "initial_price = config[\"initial_price\"]\n",
    "strike_price = config[\"strike_price\"]\n",
    "interest_rate = config[\"interest_rate\"]\n",
    "volatility = config[\"volatility\"]\n",
    "maturity_date = config[\"maturity_date\"]\n",
    "degree_of_estimation = config[\"degree_of_estimation\"]\n",
    "\n",
    "\n",
    "estimator = EuroOptionEstimator(initial_price, strike_price, interest_rate, volatility, maturity_date, degree_of_estimation)\n",
    "print(\"该期权的风险中性价格大约为\", estimator.estimate())\n",
    "print(\"以下是该量子方案的电路实现图。\")\n",
    "estimator.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过修改配置文件的内容，并运行预测代码，即可在线对模型进行测试。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "___\n",
    "\n",
    "# 注意事项\n",
    "\n",
    "这里提供的模型只用于解决布莱克-斯科尔斯模型的期权定价问题。\n",
    "\n",
    "# 引用信息\n",
    "\n",
    "```\n",
    "@article{rebentrost2018quantum,\n",
    "  title = {Quantum Computational Finance: {{Monte Carlo}} Pricing of Financial Derivatives},\n",
    "  shorttitle = {Quantum Computational Finance},\n",
    "  author = {Rebentrost, Patrick and Gupt, Brajesh and Bromley, Thomas R.},\n",
    "  year = {2018},\n",
    "  month = aug,\n",
    "  journal = {Physical Review A},\n",
    "  volume = {98},\n",
    "  number = {2},\n",
    "  pages = {022321},\n",
    "  publisher = {{American Physical Society}},\n",
    "  doi = {10.1103/PhysRevA.98.022321},\n",
    "  url = {https://link.aps.org/doi/10.1103/PhysRevA.98.022321},\n",
    "}\n",
    "```\n",
    "\n",
    "# 参考文献\n",
    "\n",
    "[1] Rebentrost, Patrick, Brajesh Gupt, and Thomas R. Bromley. \"Quantum computational finance: Monte Carlo pricing of financial derivatives.\" Physical Review A 98.2 (2018): 022321."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pq",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13 (default, Mar 28 2022, 06:16:26) \n[Clang 12.0.0 ]"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "08942b1340a5932ff3a93f52933a99b0e263568f3aace1d262ffa4d9a0f2da31"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
